/**
 * Doubao API 服务
 * 调用豆包大模型进行对话
 */

interface DoubaoMessage {
  role: 'user' | 'assistant' | 'system';
  content: string;
}

interface DoubaoResponse {
  choices: Array<{
    message: {
      role: string;
      content: string;
    };
  }>;
}

class DoubaoService {
  private apiKey = '69d2db33-18d3-497c-84be-848b43326075';
  private baseUrl = 'https://ark.cn-beijing.volces.com/api/v3';
  private model = 'doubao-seed-1-6-250615';

  async sendMessage(messages: DoubaoMessage[]): Promise<string> {
    try {
      const response = await fetch(`${this.baseUrl}/chat/completions`, {
        method: 'POST',
        headers: {
          'Content-Type': 'application/json',
          'Authorization': `Bearer ${this.apiKey}`
        },
        body: JSON.stringify({
          model: this.model,
          messages: messages,
          temperature: 0.7,
          max_tokens: 1500
        })
      });

      if (!response.ok) {
        throw new Error(`API请求失败: ${response.status} ${response.statusText}`);
      }

      const data: DoubaoResponse = await response.json();
      
      if (data.choices && data.choices.length > 0) {
        return data.choices[0].message.content;
      } else {
        throw new Error('API返回数据格式错误');
      }
    } catch (error) {
      console.error('Doubao API调用失败:', error);
      throw error;
    }
  }

  // 构建对话历史，包含角色系统提示
  buildChatHistory(messages: Array<{role: 'user' | 'assistant', content: string}>, currentRole: string): DoubaoMessage[] {
    const rolePrompts = {
      emma: `你是Emma，一位温暖专业的心理咨询师。你具有丰富的心理学知识和临床经验，总是以同理心、耐心和专业的态度帮助来访者。你的回答应该：
1. 表现出对来访者感受的理解和共情
2. 提供专业但易懂的心理学观点
3. 给出实用的建议和应对策略
4. 营造安全、支持性的对话氛围
5. 适当时询问更多细节以更好地理解情况`,
      
      sophie: `你是Sophie，一位严谨的学术研究助手。你具有广泛的学术知识和研究经验，擅长帮助学生和研究者解决学术问题。你的回答应该：
1. 提供准确、权威的学术信息
2. 引用相关的理论、研究或文献
3. 逻辑清晰，条理分明
4. 鼓励批判性思维和深入探讨
5. 提供进一步学习的方向和资源`,
      
      mike: `你是Mike，一位经验丰富的面试教练和职业发展顾问。你帮助求职者准备面试，提升职业技能。你的回答应该：
1. 提供实用的面试技巧和策略
2. 分享真实的职场经验和案例
3. 给出具体、可操作的建议
4. 帮助建立自信和专业形象
5. 关注职业发展的长远规划`
    };

    const systemPrompt = rolePrompts[currentRole as keyof typeof rolePrompts] || rolePrompts.emma;
    
    const chatHistory: DoubaoMessage[] = [
      { role: 'system', content: systemPrompt }
    ];

    // 添加历史消息，但限制数量避免token过多
    const recentMessages = messages.slice(-10); // 只保留最近10条消息
    chatHistory.push(...recentMessages);

    return chatHistory;
  }
}

export const doubaoService = new DoubaoService();